package org.grc.app.z_project.z_framework.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 反射工具类
 * 
 * @author grc
 * @since 1.0-SNAPSHOT
 */
public class ReflectionUtil {

	private static final Logger LOGGER = LoggerFactory.getLogger(ReflectionUtil.class);
	
	/**
	 * 创建实例
	 */
	public static Object newInstance (Class<?> clazz) {
		Object instance = null;
		try {
			instance = clazz.newInstance();
		} catch (Exception e) {
			LOGGER.error("new Instance failure", e);
			throw new RuntimeException(e);
		}
		return instance;
	}
	
	/**
	 * 调用方法
	 */
	public static Object invokeMethod (Object obj, Method method, Object ... args) {
		Object result = null;
		try {
			method.setAccessible(Boolean.TRUE);
			result =method.invoke(obj, args);
		} catch (Exception e) {
			LOGGER.error("invoke method failure", e);
			throw new RuntimeException(e);
		}
		return result;
	}

	/**
	 * 设置成员变量的值
	 */
	public static void setField (Object obj, Field field, Object value) {
		try {
			field.setAccessible(Boolean.TRUE);
			field.set(obj, value);
		} catch (Exception e) {
			LOGGER.error("set field failure", e);
			throw new RuntimeException(e);
		}
	}
}
